import Vue from 'vue'
import VueI18n from 'vue-i18n'
import zhCN from './langs/zh-CN'
import { languageKey } from '../env'

Vue.use(VueI18n)

export const defaultLang = 'zh-CN'

const loadedLangs = []
const messages = {
  'zh-CN': {
    ...zhCN
  }
}

const i18n = new VueI18n({
  locale: defaultLang,
  fallbackLocale: defaultLang,
  messages
})

/**
 * 设置i18n locale并修改html的lang属性
 * @param {string} lang - 语言
 * @returns {string}
 */
function setI18nLanguage (lang) {
  i18n.locale = lang
  document.querySelector('html').setAttribute('lang', lang)
  return lang
}

/**
 * 异步加载语言
 * i18n.locale   i18n.locale = lang
 * i18n messages i18n.setLocaleMessage(lang, messages)
 * @param {string} lang - 语言类别
 */
export function loadLanguageAsync (lang = defaultLang) {
  const promise = new Promise((resolve) => {
    Vue.ls.set(languageKey, lang)
    if (i18n.locale !== lang) {
      if (!loadedLangs.includes(lang)) {
        return import(`./langs/${lang}`).then(msg => {
          i18n.setLocaleMessage(lang, msg.default)
          loadedLangs.push(lang)
          return setI18nLanguage(lang)
        })
      } else {
        return resolve(setI18nLanguage(lang))
      }
    }
    return resolve(lang)
  })

  return promise
}

export function i18nRender (key) {
  return i18n.t(key)
}

export default i18n
